/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.dengues.model.database;

import org.eclipse.emf.common.util.EList;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>DB Column</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link org.dengues.model.database.DBColumn#getTable <em>Table</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#getType <em>Type</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#getDefaultValue <em>Default Value</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#isKey <em>Key</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#isNullable <em>Nullable</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#getLength <em>Length</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#getPrecision <em>Precision</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#getOutputs <em>Outputs</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#isOnlyRead <em>Only Read</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#getInputs <em>Inputs</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#getPattern <em>Pattern</em>}</li>
 *   <li>{@link org.dengues.model.database.DBColumn#isForeignKey <em>Foreign Key</em>}</li>
 * </ul>
 * </p>
 *
 * @see org.dengues.model.database.DatabasePackage#getDBColumn()
 * @model
 * @generated
 */
public interface DBColumn extends DiagramChild {
    /**
     * Returns the value of the '<em><b>Table</b></em>' container reference.
     * It is bidirectional and its opposite is '{@link org.dengues.model.database.DBTable#getColumns <em>Columns</em>}'.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Table</em>' container reference isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Table</em>' container reference.
     * @see #setTable(DBTable)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Table()
     * @see org.dengues.model.database.DBTable#getColumns
     * @model opposite="columns" transient="false"
     * @generated
     */
    DBTable getTable();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#getTable <em>Table</em>}' container reference.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Table</em>' container reference.
     * @see #getTable()
     * @generated
     */
    void setTable(DBTable value);

    /**
     * Returns the value of the '<em><b>Type</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Type</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Type</em>' attribute.
     * @see #setType(String)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Type()
     * @model
     * @generated
     */
    String getType();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#getType <em>Type</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Type</em>' attribute.
     * @see #getType()
     * @generated
     */
    void setType(String value);

    /**
     * Returns the value of the '<em><b>Default Value</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Default Value</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Default Value</em>' attribute.
     * @see #setDefaultValue(String)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_DefaultValue()
     * @model
     * @generated
     */
    String getDefaultValue();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#getDefaultValue <em>Default Value</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Default Value</em>' attribute.
     * @see #getDefaultValue()
     * @generated
     */
    void setDefaultValue(String value);

    /**
     * Returns the value of the '<em><b>Key</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Key</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Key</em>' attribute.
     * @see #setKey(boolean)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Key()
     * @model
     * @generated
     */
    boolean isKey();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#isKey <em>Key</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Key</em>' attribute.
     * @see #isKey()
     * @generated
     */
    void setKey(boolean value);

    /**
     * Returns the value of the '<em><b>Nullable</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Nullable</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Nullable</em>' attribute.
     * @see #setNullable(boolean)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Nullable()
     * @model
     * @generated
     */
    boolean isNullable();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#isNullable <em>Nullable</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Nullable</em>' attribute.
     * @see #isNullable()
     * @generated
     */
    void setNullable(boolean value);

    /**
     * Returns the value of the '<em><b>Length</b></em>' attribute.
     * The default value is <code>"-1"</code>.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Length</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Length</em>' attribute.
     * @see #setLength(int)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Length()
     * @model default="-1"
     * @generated
     */
    int getLength();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#getLength <em>Length</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Length</em>' attribute.
     * @see #getLength()
     * @generated
     */
    void setLength(int value);

    /**
     * Returns the value of the '<em><b>Precision</b></em>' attribute.
     * The default value is <code>"-1"</code>.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Precision</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Precision</em>' attribute.
     * @see #setPrecision(int)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Precision()
     * @model default="-1"
     * @generated
     */
    int getPrecision();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#getPrecision <em>Precision</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Precision</em>' attribute.
     * @see #getPrecision()
     * @generated
     */
    void setPrecision(int value);

    /**
     * Returns the value of the '<em><b>Outputs</b></em>' reference list.
     * The list contents are of type {@link org.dengues.model.database.ForeignKey}.
     * It is bidirectional and its opposite is '{@link org.dengues.model.database.ForeignKey#getSource <em>Source</em>}'.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Outputs</em>' reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Outputs</em>' reference list.
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Outputs()
     * @see org.dengues.model.database.ForeignKey#getSource
     * @model type="org.dengues.model.database.ForeignKey" opposite="source"
     * @generated
     */
    EList getOutputs();

    /**
     * Returns the value of the '<em><b>Only Read</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Only Read</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Only Read</em>' attribute.
     * @see #setOnlyRead(boolean)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_OnlyRead()
     * @model
     * @generated
     */
    boolean isOnlyRead();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#isOnlyRead <em>Only Read</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Only Read</em>' attribute.
     * @see #isOnlyRead()
     * @generated
     */
    void setOnlyRead(boolean value);

    /**
     * Returns the value of the '<em><b>Inputs</b></em>' containment reference list.
     * The list contents are of type {@link org.dengues.model.database.ForeignKey}.
     * It is bidirectional and its opposite is '{@link org.dengues.model.database.ForeignKey#getTarget <em>Target</em>}'.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Inputs</em>' containment reference list isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Inputs</em>' containment reference list.
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Inputs()
     * @see org.dengues.model.database.ForeignKey#getTarget
     * @model type="org.dengues.model.database.ForeignKey" opposite="target" containment="true"
     * @generated
     */
    EList getInputs();

    /**
     * Returns the value of the '<em><b>Pattern</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Pattern</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Pattern</em>' attribute.
     * @see #setPattern(String)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_Pattern()
     * @model
     * @generated
     */
    String getPattern();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#getPattern <em>Pattern</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Pattern</em>' attribute.
     * @see #getPattern()
     * @generated
     */
    void setPattern(String value);

    /**
     * Returns the value of the '<em><b>Foreign Key</b></em>' attribute.
     * <!-- begin-user-doc -->
     * <p>
     * If the meaning of the '<em>Foreign Key</em>' attribute isn't clear,
     * there really should be more of a description here...
     * </p>
     * <!-- end-user-doc -->
     * @return the value of the '<em>Foreign Key</em>' attribute.
     * @see #setForeignKey(boolean)
     * @see org.dengues.model.database.DatabasePackage#getDBColumn_ForeignKey()
     * @model
     * @generated
     */
    boolean isForeignKey();

    /**
     * Sets the value of the '{@link org.dengues.model.database.DBColumn#isForeignKey <em>Foreign Key</em>}' attribute.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @param value the new value of the '<em>Foreign Key</em>' attribute.
     * @see #isForeignKey()
     * @generated
     */
    void setForeignKey(boolean value);

} // DBColumn
